共计 3764 个字符,预计需要花费 10 分钟才能阅读完成。
一. 进程介绍
1. 进程
- 程序: 存放代码的文件(静态概念)
- 进程: 程序运行的过程(动态概念)
- 同一个程序可能对应多个进程
- 父进程: 程序运行时产生的第一个进程
- 子进程: 由父进程衍生出来的进程(比如在 bash 里再开一个 bash)
- 如果父进程终止, 子进程也会随之终止
- 进程是操作系统最核心的概念
2. 并行与并发
- 并发: 多个任务看起来是同时运行的
- 并行: 多个任务真正的同时运行(只有多核再能实现并行)
3. 线程
- 线程是进程内代码执行的过程
- 线程才是 CPU 上的执行单位
- 一个进程至少有一个线程
- 强调:CPU 只做代码的运行, 而不涉及 I / O 操作
4. 任务三种状态
- 运行态
- 就绪态
- 阻塞态
- 不是阻塞态就是非阻塞态
5. 提交任务的两种方式
- 同步
同步是指发送方发送数据后, 等接收方发回响应后才发下一个数据包的通讯方式
- 异步
异步是指发送方发出数据后, 不等接收方发回响应, 接着就发下个数据包的通讯方式
- 例子
1. 快递小哥给你送快递, 如果他打电话叫你过来拿, 他在那里等你, 等你从他手上把快递拿走了他才去送别人的快递, 这个就称之为同步
2. 快递小哥把你快递放在丰巢柜或者驿站, 然后打个打电话或者发个信息告诉你快递到了让你自己去拿, 然后小哥去干别的事了, 这个就是异步(效率更高一点)
二. 进程信息的查看
1.ps aux 组合命令, 查看进程信息
-a | 显示一个终端的所有进程 |
---|---|
-u | 选择有效的用户 ID 或者是用户名 |
-x | 显示没有控制终端的进程, 同时显示各个命令的具体路径 |
2. 命令显示结果
3. 首行信息代表含义
USER | 运行进程的用户 |
---|---|
PID | 进程运行的 ID 号 |
%CPU | 进程占用 CPU 百分比 |
%MEM | 进程占用内存百分比 |
VSZ | 进程占用虚拟内存的大小(单位: KB) |
RSS | 进程占用物理内存的实际大小(单位: KB) |
TTY | 进程运行的终端(tty1, pts/ 0 虚拟终端等) |
STAT | 进程运行过程中的状态(R S D T Z X < N s + l |) "man" 查询 |
START | 进程启动时间 |
TIME | 进程占用 CPU 的总时间("0" 表示还没有超过 "1" 秒) |
COMMAND | 程序运行指令, 有 [] 代表内核态进程, 没有 [] 代表用户态进程 |
- VSZ : 是指已分配的线性空间大小, 这个大小通常并不等于程序实际用到的内存大小,(内存映射, 共享的动态库, 或向系统申请了更多的堆都会扩大线性空间)
-
RSS : 常驻内存大小, 即进程实际占用的物理内存大小
-
STAT进程状态
R | 进程运行 |
---|---|
S | 可中断睡眠(sleep), 执行 I / O 操作可得到硬件设备响应 |
D | 不可中断睡眠, 执行 I / O 操作得不到硬件设备的响应 |
T | 停止的进程 |
Z | 僵尸进程 |
s | 大 S 后面的小 s, 代表包含子进程 |
< | 优先级较高的进程 |
N | 优先级较低的进程 |
+ | 前台运行的进程 |
|(管道符号) | 代表多进程 |
X | 死掉的进程(几乎看不见, 死掉后就被回收了) |
l(小写 l) | 以多线程的方式运行 |
- D状态与 Z 状态的进程都无法使用 kill -9 杀死
4.ps -elf 查看命令
- 选项
-e | 显示所有进程 |
---|---|
-f | 全格式 |
-l | 长格式 |
- 三种查看效果对比 (PPID 代表当前进程的父进程)
5. 查看进程不同状态
- S+状态与 T 状态切换
🌵打开一个文件进行编辑
[root@shawn ~]# vim aaa.txt
🌵ps 查看
[root@shawn ~]# ps aux | grep [v]im
root 94654 0.0 0.5 149816 5408 pts/0 S+ 17:04 0:00 vim aaa.txt
🌵Ctrl + z 暂停挂到后台再查看
[root@shawn ~]# ps aux | grep [v]im
root 94654 0.0 0.5 149816 5408 pts/0 T 17:04 0:00 vim aaa.txt
- 查看 S+ R+ D+ 状态
🌵我们将这些目录打包压缩成一个压缩包, 内容比较大
[root@shawn ~]# tar cfz /aaa.gz /home /opt /boot /run
🌵然后不断地使用 "ps" 命令去查看 "tar" 的运行状态
[root@shawn ~]# ps aux | grep [t]ar
root 96003 5.0 0.1 123808 1408 pts/0 S+ 17:30 0:00 tar cfz /aaa.gz /home /opt /boot /run
[root@shawn ~]# ps aux | grep [t]ar
root 96003 6.8 0.1 123808 1408 pts/0 R+ 17:30 0:00 tar cfz /aaa.gz /home /opt /boot /run
[root@shawn ~]# ps aux | grep [t]ar
root 96003 5.5 0.1 123808 1408 pts/0 D+ 17:30 0:01 tar cfz /aaa.gz /home /opt /boot /run
🌵捕捉到了三种状态
6. 查看进程树
🌵先安装 "pstree" 应用
[root@shawn ~]# yum -y install psmisc
[root@shawn ~]# rpm -qf `which pstree`
psmisc-22.20-16.el7.x86_64
🌵查看
[root@shawn ~]# pstree
systemd─┬─VGAuthService
├─abrt-watch-log
├─abrtd
├─auditd───{auditd}
├─crond
├─dbus-daemon
├─login───bash
├─master─┬─pickup
│ └─qmgr
├─polkitd───6*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd─┬─sshd───bash
│ └─sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
[root@shawn ~]# pstree 95327 (查看某一个进程)
bash───pstree
7. 动态查看用法 top
-
常用选项
-d | 指定刷新时间(秒) |
---|---|
-p | 指定某个进程(PID) |
-u | 查看指定用户的进程 |
-
选项示例
⛅查看指定进程 ID 的进程信息
top -d 1 -p 11019
1 秒刷新一次
⛅查看指定用户开启的所有进程信息
top -d 1 -u song1
1 秒刷新一次
-
动态信息含义
⛅首行(可按小写 L 选择开启或关闭)
top | 当前时间 |
---|---|
up | 系统已运行时间 |
users | 登入的用户数量 |
load average | 平均负载(1 分钟,5 分钟,15 分钟) |
⛅第二行
Tasks: 111 total | 表示有 111 个进程 |
---|---|
running | 正在运行的进程数 |
sleeping | 正在睡眠的进程数 |
stopped | 停止的进程数 |
zombie | 僵尸进程数 |
⛅第三行
%CPU(s):(按 "1" 可以展开) | 表示各种占用 CPU 的百分比 |
---|---|
us | 用户态占用 CPU 百分比 |
sy | 内核态占用 CPU 百分比 |
ni | nice 值 |
id | 空闲 CPU 百分比 |
wa | cpu 等待 I / O 完成时间 |
hi | 硬件中断占 CPU 百分比 |
si | 软件中断占 CPU 百分比 |
st | 被虚拟化偷走的 CPU 时间 |
⛅第四行
KIB Mem : | 物理内存 |
---|---|
total | 物理内存总空间 |
free | 空闲空间 |
used | 已用空间 |
buff / cache | 缓冲 / 缓存占用空间 |
⛅第五行
KIB Swap : | 交换分区大小 |
---|---|
total | 交换分区总空间 |
free | 空闲空间 |
used | 已用空间 |
avail Mem | 可用内存 |
⛅信息字段含义补充
PR | 优先级(比 NI 大 20) |
---|---|
NI | nice 值, 也表示优先级 |
VIRT | 虚拟内存(线性空间) |
RES | 进程当前使用的内存大小 |
SHR | 共享内存 |
-
进程信号
⛅kill -l
列出当前系统支持的信号
⛅常用信号
编号 | 含义 | 作用 |
---|---|---|
1 | SIGHUP | 不用重启进程直接重新加载配置文件 |
9 | SIGKILL | 强制杀死进程(D,Z 杀不死) |
15 | SIGTERM | 终止进程, kill 默认就是这个信号 |
18 | SIGCONT | 让被停止的进程恢复运行 |
19 | SIGSTOP | 暂停进程 |
⛅信号使用示例(使用信号 18,19)
🌵我们开启一个 "ping" 进程
# ping 192.168.12.1
🌵使用 "ps" 命令查看 "ping" 进程
# ps aux | grep [p]ing
🌵停止进程挂职后台
# kill -19 25002
或者 Ctrl + z
🌵再次查看状态
# ps aux | grep [p]ing
🌵使用 "18" 信号将其继续运行
# kill -18 25002
# ps aux | grep [p]ing
⛅信号使用示例 2(使用信号 1)
🌵使用信号 "1", 再不重启进程 (进程号不变) 的情况下重新载入配置
# vim /etc/vsftpd/vsftpd.conf (编辑 ftp 配置文件)
# ps aux | grep [v]sftpd (查看 ftp 进程信息)
root 11019 0.0 0.0 53288 772 ? Ss 17:21 0:00 /usr/sbin/vsftpd/etc/vsftpd/vsftpd.conf
# kill -1 11019 (重载 ftp 配置文件)
⛅根据进程名杀死所有进程
# killall -9 vim (杀死所有的 "vim" 进程)
# pkill -9 vim (杀死所有的 "vim" 进程)
⛅查看某个用户开启的进程
# pgrep -l -u song1
-
TOP 常用 内部命令
s(默认 3 秒) | 修改刷新时间, 建议不要设置很小, 会消耗 CPU 资源 |
---|---|
q | 退出, 或者是 Ctrl + c |
M | 按照内存占用率大小从大到小排序 |
P | 按照 CPU 占用率从大到小排序 |
N | 按照 PID 从大到小排序 |
(R) | 以上配合 R 可进行倒序 |
(shift + > <) | 以上配合左右可进行左右字段选择 |
f | 增加显示的字段, 空格键选择 |
k | 发送信号 |
数字 "1" | 展开显示所有的 CPU 信息 |
z | 变颜色 |
"⬆","⬇" | 向上向下进行翻页查看 |
r | 调整进程优先级 |
三. 关于 HUP 信号
正文完